package com.molichuxing.services.infrastructure.service;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.services.infrastructure.dto.response.CarDto;
import com.molichuxing.services.infrastructure.dto.response.MaintenanceDto;
import com.molichuxing.services.property.MaintenanceStatusEnum;
import com.molichuxing.services.property.MaintenanceTabEnum;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 保养表 服务类
 * </p>
 *
 * @author xuelin yi
 * @since 2019-09-23
 */
public interface MaintenanceService {

    /**
     * 根据条件查询保养信息列表分页
     *  type 保养类别：1-待保养，0-待审核，8-审核记录
     * list<Integer> vehicleIds   车辆id集合
     * totalStartMileage    已行驶开始里程
     * totalEndMileage    已行驶结束里程
     *  maintainableStartDate   开始保养时间
     *  maintainableEndDate   结束保养时间
     * @param map
     * @param pageNum
     * @param pageSize
     * @return
     */
    public Paged<MaintenanceDto> getMaintenancePage(Map<String, Object> map, Integer pageNum, Integer pageSize);


    /**
     * 根据状态获取保养的数量
     * @param maintenanceTabEnum
     * @return
     */
    public Integer getCount(MaintenanceTabEnum maintenanceTabEnum);

    /**
     * 根据主键id获取保养信息
     * @param maintenanceId
     * @return
     */
    public MaintenanceDto getMaintenance(Integer maintenanceId);


    /**
     * 根据用户id查询一条状态为待保养的信息
     * @param userId
     * @return
     */
    public MaintenanceDto getMaintenanceByuserId(Integer userId);
    
    /**
     * 根据用户id和订单code集合 查询状态为待保养的信息
     * @param orderCodes
     * @param userId
     * @return
     */
    public List<MaintenanceDto> getMaintenanceByorderCodes(List<Long> orderCodes, Integer userId);

    /**
     * 应保养&待审核
     * @param status
     * @return
     */
    public Integer getMaintenancePendCount(Integer status);

    /**
     * 根据车辆id查询 最新一条保养信息
     * @param carId
     * @return
     */
    public MaintenanceDto getOneMaintenanceByCarId(Integer carId);

    /**
     * 创建保养信息 返回id
     * @param maintenanceDto
     * @return
     */
    Integer createMaintenance(MaintenanceDto maintenanceDto);


    /**
     * 修改保养信息
     * @param maintenanceDto
     * @return
     */
    int updateMaintenanceById(MaintenanceDto maintenanceDto);

    /**
     * 修改车辆的还车数据
     * @param carId
     * @return
     */
    Boolean updateMaintenanceReturnCar(Integer carId);


    /**
     * 修改保养状态
     * @param maintenanceStatusEnum
     * @return
     */
    int updateMaintenanceStatusById(Integer id,MaintenanceStatusEnum maintenanceStatusEnum);


    /**
     * 查询需要从v2导入v3的数据
     * @return
     */
    void importMaintenanceData();

}
